跳到主要内容

列属性,字段约束

NULL,not null属性空约束
------------------

mysql的NULL不是数据,也不是类型!只是标识属性!

用于说明某个字段,是否可以为null(是否可以什么都不存)

NULL采用关键NULL表示!(不是字符串)

是:NULL,而不是:‘NULL’

属性:

null 表示可以为空

![](EE7DA428DF45B34C95D0683D23422349.png)

not null,表示不能为空

![](20DFE699E303D932D932290C7E09FAC8.png)

如果,在添加数据时 ,没有指定值,也可能会是NULL!

default属性,默认值约束
---------------

采用 default 关键字,来限定一个字段的默认值,在没有指定字段数据时,采用默认值!

![](B045B38AE7B37A6A50EFD6C83881D93D.png)

![](F8AC7C0D29C6359C2A39775623CC21E7.png)

default 与 null 的处理关系!

如果此时,该字段被指定了一个null:

不能使用默认值,允许为null则为null,不允许则插入失败!

![](F95937B86A37BBE9E1C16C3C63191494.png)

如果一个字段没有指定默认值,那么默认为NULL

![](998766A78B1F5B5CE0B9203D2D914813.png)

此时:如果在定义该字段时,不允许为NULL,则插入时,必须保证该字段有值才可以!

(另外一个选择是增加默认值)

![](235CDA0580D3CEFBEC827685EFC996B6.png)

默认值,存在一些特殊的标记关键字:

default,用在值中的关键字!

![](AE63A4BCBDB165B3D39143F7FEB498B3.png)

current\_timestamp,用在第一个时间戳类型的字段上,表示当前的时间!

![](09AA747E7021206B63D5E9DC90F17B8A.png)

典型在很多表上增加一个 update\_time 将其默认值设置成 current\_timestamp。就可以记录下当前记录的最后操作时间!

主键约束/唯一约束,primary unique
------------------------

站在约束的角度,限制的,该字段,值要唯一!

但是 主键 与 唯一 不是一个概念:

都是索引的一种!

主键:

可以唯一标识记录的字段,称之为主键!

唯一:

保证在某个字段上的数据是唯一的,可以设置成唯一约束!

但是,一个表,只能有一个主键!

典型的,在创建表时,主动增加一个 非实体的自然属性,充当主键,采用整型,运算速度快!

![](2B34C659B0830A003C4F62EC83BA0838.png)

其他的唯一字段,建立唯一约束!

建立:

两种方案:

![](B6227DAA1CAA0316911F9167B2AFA476.png)

一旦创建了主键:

默认就是不能为空:

![](51F4F5ED7A94EF15A59C48CAB9BF726F.png)

唯一,使用 unique key 来创建!

![](B08A42F38C41A5378D9E556BCD56ADB4.png)

![](C99B33C903D1F275128EC7DF92BE7DD4.png)

一个表可以有多个唯一,但是只能有一个主键!

注意:主键或者是唯一,都可以由 多个字段组成!

![](https://leanote.com/api/file/getImage?fileId=58557d62ab64416d7600c483)

因此,主键 与 字段的概念:字段来充当主键,不是字段就是主键!(称之为复合主键)

尽量采用 id 一个来作为主键!

![](8781961E7F7A6F37B230EFF084EDFA65.png)

### 如果管理的主键/唯一呢

删除主键:

alter table表名 drop primary key;

![](8BC0D03DB046F20EBB7EADB834752075.png)

添加主键

alter table 表名 add primary key(‘字段列表’);

![](61EE0F40969DA696AF423D5C60C3CD34.png)

删除唯一

alter table 表名 drop index index\_name;

索引的名字,可以通过 show create table 看到!

![](3B19C04FAF3601CC8ACA89951B1E6D77.png)

![](18AD22E0CC3F502A0D8F21B7879FC898.png)

增加唯一

alter table 表名 add unique key 索引名字 (字段列表)

![](3A7A10C92F5D49B9E447B0B8A45CCBD6.png)

自动增长,auto\_increment
--------------------

用于主键,只有一个字段主键,才能使用auto\_increment!

可以,从1开始,逐一递增的数值!

目的是保证唯一,计算方面!

![](B46B3BDF1457BC87B3F4C87E221A0FE7.png)

典型的,从1 开始,没有负数,可以采用 无符号 unsigned整型!

![](C237982CF7E2DC966A0ABD1956CF156F.png)

![](3CF67B279D0B459652230C4917364AE9.png)

注意: unsigned,不是列属性,是类型的一部分!(包括zerofill)因此位置上与类型在一起!

![](3C9E1DFA02AFA9C9C89F99CED092EB2A.png)

comment,注释
----------

![](CDC64BBEC545916E17486979A6DA28D9.png)

外键!

预习
==

1, 范式

2, 表实体之间的关系

3, 外键约束

4,语句(查询语句)

作业
==

1 说说那些地方可以设置编码

2 增加对 库的管理(删,增加)

增加 对 表的管理(增加,改名,删除)

增加 对 字段的管理(增加,删除)

增加 对 数据的管理 (增加,删除,编辑)

位,bit,比特,计算机可以处理的最小单元

字节,Bytes 存储的最基本单位。KB 千字节, MB,兆字节,GB,1024\*MB,TB,1024\*GB。一个字节 8 个位。 1Byte = 8 bit.

字符,char,一个显示逻辑上的单位,一个图形就是一个字符。

字,双字节

双字,4字节。

4, 编程,定义一个函数

参数为 table\_name 表名,要求大家返回一个数组,内容是当前表的结构信息!只需要字段名,如果有主键,则在返回其主键(不考虑符合主键)

f1(stu)

array(‘id’, ‘name’, ‘pk’=\>’id’)

5,建立一个学生信息表!尽可能利用多种类型!

编码:

建表,建库,建字段 设置(数据库中的数据的编码)

PHP作为mysql服务器的客户端,设置的客户端编码和连接编码(set names)

设置php返回给浏览器数据的编码,(Content-Type,header(),\<meta\>)

PHP文件本身保存的编码(文件编码,通过文本编辑器设置)

[浏览器查看时,可以强制指定编码]